package com.penta.util;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Date;

/**
 * 文件工具类
 */
public class FileUtil {

    /**
     * 获取目录，如果不存在时，则先创建目录，再返回
     * @return
     */
    public static File getPathAndMkdirs(String filePath) throws IOException {

        File directory = new File(filePath);
        if(!directory.exists()) {      // 如果目录不存在，则开始创建目录
            boolean mkdirsResult = directory.mkdirs();
            if(!mkdirsResult) {
                throw new IOException("创建目录失败");
            }
        }
        return directory;
    }

    /**
     * 创建输出结果文件
     * 传入模板名称，
     * @param fileName
     *             源文件
     * @param  flag
     *             标识符：1 表示生成1;2 表示生成2
     * @param moduleType
     *              模板类型：1 模板1; 2 模板2.
     */
    public static File createOutPutFile(String fileName,String flag,String exportPath,String moduleType) {
        Date currDate = new Date();

        File newFile = null;
        String newFileName = null;     //
        String snowId = DateUtil.format(currDate,"-HHmmss");           // 当前时间节点
        // 获取当前的日期，用于在新的目录中创建新的目录
        String newPath = exportPath + File.separator + DateUtil.format(currDate,"yyyy-MM-dd");
        File newPathDir = new File(newPath);
        if(!newPathDir.exists()) {     // 首先保证输出的目录存在
            try {
                newPathDir.mkdir();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        String fileNameNoExten = fileName;      // 去掉扩展名的源文件名称
        fileNameNoExten = StrUtil.replace(fileNameNoExten,".xlsx","");
        fileNameNoExten = StrUtil.replace(fileNameNoExten,".xls","");

        String templateFile = null;    // 模板文件
        if("1".equals(moduleType)) {           // 类型为：模板一
            if("1".equals(flag)) {     // 生成1
                templateFile = "temp" + moduleType + "-1.xlsx";
                if(StrUtil.containsAny(fileNameNoExten,"PENTA PI")) {
                    newFileName = StrUtil.replace(fileNameNoExten,"PENTA PI","REAL INV") + ".xlsx";
                } else {
                    newFileName = "REAL INV" + fileNameNoExten + ".xlsx";
                }
            } else {                   // 生成2
                templateFile = "temp" + moduleType + "-2.xlsx";
                if(StrUtil.containsAny(fileNameNoExten,"PENTA PI")) {
                    newFileName = StrUtil.replace(fileNameNoExten,"PENTA PI","REAL PKL") + ".xlsx";
                } else {
                    newFileName = "REAL PKL" + fileNameNoExten + ".xlsx";
                }
            }

        } else {                               // 类型为：模板二
            if("1".equals(flag)) {     // 生成1
                templateFile = "temp" + moduleType + "-1.xlsx";
                if(StrUtil.containsAny(fileNameNoExten,"DUTY PI")) {
                    newFileName = StrUtil.replace(fileNameNoExten,"DUTY PI","DUTY INV") + ".xlsx";
                } else {
                    newFileName = "DUTY INV" + fileNameNoExten + ".xlsx";
                }
            } else {                   // 生成2
                templateFile = "temp" + moduleType + "-2.xlsx";
                if(StrUtil.containsAny(fileNameNoExten,"DUTY PI")) {
                    newFileName = StrUtil.replace(fileNameNoExten, "DUTY PI", "DUTY PKL") + ".xlsx";
                } else {
                    newFileName = "DUTY PKL" + fileNameNoExten + ".xlsx";
                }
            }
        }

        /**
         * 输出文件的路径
         */
        String outputFile = newPath + File.separator + newFileName;

        // 读入模板的输入流
        InputStream inputStream = FileUtil.class.getClassLoader().getResourceAsStream(templateFile);

        /**
         * 通过输出流，创建新的文件
         */
        try {

            // 创建 FileOutputStream
            FileOutputStream fileOutputStream = new FileOutputStream(outputFile);

            byte[] buffer = new byte[1024];      // 缓冲区大小，可以根据需要调整
            int bytesRead;
            while((bytesRead = inputStream.read(buffer)) != -1) {
                fileOutputStream.write(buffer,0,bytesRead);        // 输出
            }

            newFile = new File(outputFile);

        } catch (Exception e) {
            e.printStackTrace();
        }

        return newFile;
    }

}
